﻿using System;
using System.Collections;
using System.Windows;
using System.Windows.Controls;

namespace Collections
{
    public partial class Fenetre : Window
    {
        public Fenetre()
        {
            InitializeComponent();

            Zoo monZoo = new Zoo();

            // On ajoute quelques animaux au Zoo
            monZoo.Ajouter( new Lion() );
            monZoo.Ajouter( new Elephant() );
            monZoo.Ajouter( new Antilope() );

            // Et on demande à afficher des informations sur les habitants du Zoo
            monZoo.AfficheLesInformationsSurLeZoo( rtb );
        }
    }

    /// <summary>
    /// Une classe représentant un Zoo
    /// </summary>
    public class Zoo
    {
        /// <summary>
        /// Notez bien que lesAnimaux est de type ArrayList
        /// </summary>
        private ArrayList lesAnimaux;

        /// <summary>
        /// Indexer
        /// </summary>
        public Animal this[int index]
        {
            get
            {
                // AFAIRE: Fixez le type de retour
                return (Animal) lesAnimaux[index];
            }
        }

        /// <summary>
        /// AFAIRE: Instanciez le type ArrayList
        /// </summary>
        public Zoo()
        {
            // lesAnimaux =
            lesAnimaux = new ArrayList();
        }

        public void AfficheLesInformationsSurLeZoo(RichTextBox boiteAffichage)
        {
            foreach (Animal a in lesAnimaux)
            {
                boiteAffichage.AppendText( a.ToString() + ": " );
                boiteAffichage.AppendText( a.Information() );
                boiteAffichage.AppendText( "\n" );
            }
        }

        public void Ajouter( Animal a )
        {
            // AFAIRE: Implémentez la méthode Ajouter
            // Elle ajoute simplement un animal supplémentaire à la liste
            lesAnimaux.Add(a);
        }
    }

    /// <summary>
    /// Classes utilisées pour définir des animaux
    /// </summary>
    public abstract class Animal
    {
        abstract public string Information();
    }

    public class Lion : Animal
    {
        public override string Information()
        {
            return ( "Classification: Panthera Leo" );
        }
    }

    public class Elephant : Animal
    {
        public override string Information()
        {
            // Elephant africain
            return ("Classification: Loxodonta Africana ");
        }
    }

    public class Antilope : Animal
    {
        public override string Information()
        {
            return ("Classification: Bovidae" );
        }
    }
}
